home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / thinkref / archive / THINKPascalUH2.1.sea / THINKPas Univ Hdr 2.1 / Interfaces / Threads.p < prev    next >
Text File  |  1995-09-12  |  7KB  |  241 lines

  1. { Converted with MPW2TPas Tuesday, September 12, 1995 10:58:03 PM }
  2. {
  3.      File:        Threads.p
  4.  
  5.      Contains:    Thread Manager Interfaces.
  6.  
  7.      Version:    Technology:    System 7.5
  8.                  Package:    Universal Interfaces 2.1 in “MPW Latest” on ETO #18
  9.  
  10.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  11.                  All rights reserved.
  12.  
  13.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  14.                  stack.  Include the file and version information (from above)
  15.                  in the problem description and send to:
  16.                      Internet:    apple.bugs@applelink.apple.com
  17.                      AppleLink:    APPLE.BUGS
  18.  
  19. }
  20.  
  21.  UNIT Threads;
  22.  INTERFACE
  23.  
  24.  
  25. {$IFC UNDEFINED __THREADS__}
  26. {$SETC __THREADS__ := 1}
  27.  
  28.   USES
  29.    ConditionalMacros, Types, Errors, Memory;
  30.  
  31. { $PUSH}
  32. { $ALIGN MAC68K}
  33. { $LibExport+}
  34.     
  35. TYPE
  36.     ThreadState = INTEGER;
  37.  
  38.  
  39. CONST
  40.     kReadyThreadState            = 0;
  41.     kStoppedThreadState            = 1;
  42.     kRunningThreadState            = 2;
  43.  
  44. { Error codes have been meoved to Errors.(pah) }
  45. { Thread environment characteristics }
  46.     
  47. TYPE
  48.     ThreadTaskRef = Ptr;
  49.  
  50. { Thread characteristics }
  51.     ThreadStyle = LONGINT;
  52.  
  53.  
  54. CONST
  55.     kCooperativeThread            = $1;
  56.     kPreemptiveThread            = $2;
  57.  
  58. { Thread identifiers }
  59.     
  60. TYPE
  61.     ThreadID = LONGINT;
  62.  
  63.  
  64. CONST
  65.     kNoThreadID                    = 0;
  66.     kCurrentThreadID            = 1;
  67.     kApplicationThreadID        = 2;
  68.  
  69. { Options when creating a thread }
  70.     
  71. TYPE
  72.     ThreadOptions = LONGINT;
  73.  
  74.  
  75. CONST
  76.     kNewSuspend                    = $1;
  77.     kUsePremadeThread            = $2;
  78.     kCreateIfNeeded                = $4;
  79.     kFPUNotNeeded                = $8;
  80.     kExactMatchThread            = $10;
  81.  
  82. { Information supplied to the custom scheduler }
  83.  
  84. TYPE
  85.     SchedulerInfoRec = RECORD
  86.         InfoRecSize:            LONGINT;
  87.         CurrentThreadID:        ThreadID;
  88.         SuggestedThreadID:        ThreadID;
  89.         InterruptedCoopThreadID: ThreadID;
  90.     END;
  91.  
  92.     SchedulerInfoRecPtr = ^SchedulerInfoRec;
  93.  
  94. {$IFC GENERATING68K  & GENERATINGCFM }
  95. {
  96.     The following UniversalProcPtrs are for CFM-68k compatiblity with
  97.     the implementation of the Thread Manager.
  98. }
  99.     ThreadEntryProcPtr = UniversalProcPtr;
  100.  
  101.     ThreadSchedulerProcPtr = UniversalProcPtr;
  102.  
  103.     ThreadSwitchProcPtr = UniversalProcPtr;
  104.  
  105.     ThreadTerminationProcPtr = UniversalProcPtr;
  106.  
  107.     DebuggerNewThreadProcPtr = UniversalProcPtr;
  108.  
  109.     DebuggerDisposeThreadProcPtr = UniversalProcPtr;
  110.  
  111.     DebuggerThreadSchedulerProcPtr = UniversalProcPtr;
  112.  
  113. {$ELSEC}
  114. {
  115.     The following ProcPtrs cannot be interchanged with UniversalProcPtrs because
  116.     of differences between 680x0 and PowerPC runtime architectures with regard to
  117.     the implementation of the Thread Manager.
  118.  }
  119. { Prototype for thread's entry (main) routine }
  120.     voidPtr = Ptr;
  121.  
  122.     ThreadEntryProcPtr = ProcPtr;  { FUNCTION (threadParam: UNIV Ptr): voidPtr; }
  123.  
  124. { Prototype for custom thread scheduler routine }
  125.     ThreadSchedulerProcPtr = ProcPtr;  { FUNCTION (schedulerInfo: SchedulerInfoRecPtr): ThreadID; }
  126.  
  127. { Prototype for custom thread switcher routine }
  128.     ThreadSwitchProcPtr = ProcPtr;  { PROCEDURE (threadBeingSwitched: ThreadID; switchProcParam: UNIV Ptr); }
  129.  
  130. { Prototype for thread termination notification routine }
  131.     ThreadTerminationProcPtr = ProcPtr;  { PROCEDURE (threadTerminated: ThreadID; terminationProcParam: UNIV Ptr); }
  132.  
  133. { Prototype for debugger NewThread notification }
  134.     DebuggerNewThreadProcPtr = ProcPtr;  { PROCEDURE (threadCreated: ThreadID); }
  135.  
  136. { Prototype for debugger DisposeThread notification }
  137.     DebuggerDisposeThreadProcPtr = ProcPtr;  { PROCEDURE (threadDeleted: ThreadID); }
  138.  
  139. { Prototype for debugger schedule notification }
  140.     DebuggerThreadSchedulerProcPtr = ProcPtr;  { FUNCTION (schedulerInfo: SchedulerInfoRecPtr): ThreadID; }
  141.  
  142. {$ENDC}
  143.  
  144. FUNCTION CreateThreadPool(thrdStyle: ThreadStyle; numToCreate: INTEGER; stackSize: Size): OSErr;
  145.     {$IFC NOT GENERATINGCFM}
  146.     INLINE $303C, $0501, $ABF2;
  147.     {$ENDC}
  148. FUNCTION GetFreeThreadCount(thrdStyle: ThreadStyle; VAR freeCount: INTEGER): OSErr;
  149.     {$IFC NOT GENERATINGCFM}
  150.     INLINE $303C, $0402, $ABF2;
  151.     {$ENDC}
  152. FUNCTION GetSpecificFreeThreadCount(thrdStyle: ThreadStyle; stackSize: Size; VAR freeCount: INTEGER): OSErr;
  153.     {$IFC NOT GENERATINGCFM}
  154.     INLINE $303C, $0615, $ABF2;
  155.     {$ENDC}
  156. FUNCTION GetDefaultThreadStackSize(thrdStyle: ThreadStyle; VAR stackSize: Size): OSErr;
  157.     {$IFC NOT GENERATINGCFM}
  158.     INLINE $303C, $0413, $ABF2;
  159.     {$ENDC}
  160. FUNCTION ThreadCurrentStackSpace(thread: ThreadID; VAR freeStack: LONGINT): OSErr;
  161.     {$IFC NOT GENERATINGCFM}
  162.     INLINE $303C, $0414, $ABF2;
  163.     {$ENDC}
  164. FUNCTION NewThread(thrdStyle: ThreadStyle; threadEntry: ThreadEntryProcPtr; threadParam: UNIV Ptr; stackSize: Size; options: ThreadOptions; threadResult: UNIV Ptr; VAR threadMade: ThreadID): OSErr;
  165.     {$IFC NOT GENERATINGCFM}
  166.     INLINE $303C, $0E03, $ABF2;
  167.     {$ENDC}
  168. FUNCTION DisposeThread(threadToDump: ThreadID; threadResult: UNIV Ptr; recycleThread: BOOLEAN): OSErr;
  169.     {$IFC NOT GENERATINGCFM}
  170.     INLINE $303C, $0504, $ABF2;
  171.     {$ENDC}
  172. FUNCTION YieldToThread(suggestedThread: ThreadID): OSErr;
  173.     {$IFC NOT GENERATINGCFM}
  174.     INLINE $303C, $0205, $ABF2;
  175.     {$ENDC}
  176. FUNCTION YieldToAnyThread: OSErr;
  177.     {$IFC NOT GENERATINGCFM}
  178.     INLINE $42A7, $303C, $0205, $ABF2;
  179.     {$ENDC}
  180. FUNCTION GetCurrentThread(VAR currentThreadID: ThreadID): OSErr;
  181.     {$IFC NOT GENERATINGCFM}
  182.     INLINE $303C, $0206, $ABF2;
  183.     {$ENDC}
  184. FUNCTION GetThreadState(threadToGet: ThreadID; VAR thrdState: ThreadState): OSErr;
  185.     {$IFC NOT GENERATINGCFM}
  186.     INLINE $303C, $0407, $ABF2;
  187.     {$ENDC}
  188. FUNCTION SetThreadState(threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID): OSErr;
  189.     {$IFC NOT GENERATINGCFM}
  190.     INLINE $303C, $0508, $ABF2;
  191.     {$ENDC}
  192. FUNCTION SetThreadStateEndCritical(threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID): OSErr;
  193.     {$IFC NOT GENERATINGCFM}
  194.     INLINE $303C, $0512, $ABF2;
  195.     {$ENDC}
  196. FUNCTION SetThreadScheduler(threadScheduler: ThreadSchedulerProcPtr): OSErr;
  197.     {$IFC NOT GENERATINGCFM}
  198.     INLINE $303C, $0209, $ABF2;
  199.     {$ENDC}
  200. FUNCTION SetThreadSwitcher(thread: ThreadID; threadSwitcher: ThreadSwitchProcPtr; switchProcParam: UNIV Ptr; inOrOut: BOOLEAN): OSErr;
  201.     {$IFC NOT GENERATINGCFM}
  202.     INLINE $303C, $070A, $ABF2;
  203.     {$ENDC}
  204. FUNCTION SetThreadTerminator(thread: ThreadID; threadTerminator: ThreadTerminationProcPtr; terminationProcParam: UNIV Ptr): OSErr;
  205.     {$IFC NOT GENERATINGCFM}
  206.     INLINE $303C, $0611, $ABF2;
  207.     {$ENDC}
  208. FUNCTION ThreadBeginCritical: OSErr;
  209.     {$IFC NOT GENERATINGCFM}
  210.     INLINE $303C, $000B, $ABF2;
  211.     {$ENDC}
  212. FUNCTION ThreadEndCritical: OSErr;
  213.     {$IFC NOT GENERATINGCFM}
  214.     INLINE $303C, $000C, $ABF2;
  215.     {$ENDC}
  216. FUNCTION SetDebuggerNotificationProcs(notifyNewThread: DebuggerNewThreadProcPtr; notifyDisposeThread: DebuggerDisposeThreadProcPtr; notifyThreadScheduler: DebuggerThreadSchedulerProcPtr): OSErr;
  217.     {$IFC NOT GENERATINGCFM}
  218.     INLINE $303C, $060D, $ABF2;
  219.     {$ENDC}
  220. FUNCTION GetThreadCurrentTaskRef(VAR threadTRef: ThreadTaskRef): OSErr;
  221.     {$IFC NOT GENERATINGCFM}
  222.     INLINE $303C, $020E, $ABF2;
  223.     {$ENDC}
  224. FUNCTION GetThreadStateGivenTaskRef(threadTRef: ThreadTaskRef; threadToGet: ThreadID; VAR thrdState: ThreadState): OSErr;
  225.     {$IFC NOT GENERATINGCFM}
  226.     INLINE $303C, $060F, $ABF2;
  227.     {$ENDC}
  228. FUNCTION SetThreadReadyGivenTaskRef(threadTRef: ThreadTaskRef; threadToSet: ThreadID): OSErr;
  229.     {$IFC NOT GENERATINGCFM}
  230.     INLINE $303C, $0410, $ABF2;
  231.     {$ENDC}
  232.  
  233. { $ALIGN RESET}
  234. { $POP}
  235.  
  236. {$ENDC} {__THREADS__}
  237.  
  238.  IMPLEMENTATION
  239.  END.
  240.  
  241.